perm filename SEDIT.LSP[SCH,LSP] blob sn#688842 filedate 1982-11-14 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	-*-LISP-*-
C00007 ENDMK
C⊗;
;;;-*-LISP-*-
;;; To communicate with a text editor via VALRET's.
;;; Adapted for Maclisp in general from code in KMP's ULISP system.
;;; 12:57pm  Monday, 24 August 1981 - George Carrette.
;;; 10:23pm  Monday, 11 October 1982 - Mark Hamilton
;;;		added expunge to velret-to-editor

(HERALD SEDIT)

(eval-when (compile) (load "scm:umacro"))

(DEFVAR *EDITOR-JOB-NAME*      NIL)           ;Job name of editor to use
(DEFVAR *EDITOR-COMM-FILE*		      ;File for editor communication
  (caseq (status opsys)
    ((TOPS-20) "←SCHEDIT.LSP.0")
    ((ITS) "←SEDIT >")))
(DEFVAR *EDITOR-COMM-LOADER* 'LOAD)           ;Function to load files
(DEFVAR *EDITOR-COMM-FILE-DELETE-AFTER-LOADER?* T)

(DEFUN TOPLEVEL-EDITOR-CALL (&OPTIONAL (JNAME NIL JNAME?))
       (DELETE-LOST-COMM-FILES)
       (NOINTERRUPT ())
       (IF JNAME? (SETQ *EDITOR-JOB-NAME* JNAME))
       (READ-EDITOR-NAME-IF-NEEDED)
       (VALRET-TO-EDITOR)
       (CLEAR-SCREEN)
       (PRINC "Returning from Editor. ")
       (PRINC (IF (PROCESS-COMM-FILES *editor-comm-loader*)
		  "Loading done. "
		  "No files to load. ")))

(DEFUN DELETE-LOST-COMM-FILES ()
       (DO ((FILE (PROBEF *EDITOR-COMM-FILE*)	
		  (PROBEF *EDITOR-COMM-FILE*)))
	   ((NULL FILE))
	   (DELETEF FILE)))

(DEFUN READ-EDITOR-NAME-IF-NEEDED ()
       (IF (NOT *EDITOR-JOB-NAME*)
	   (PROGN (TERPRI)
		  (PRINC "Editor Name: ")
		  (SETQ *EDITOR-JOB-NAME* (READ)))))

(DEFVAR MONITOR-CONTINUE-STRING "")

(DEFVAR MONITOR-EXPUNGE-STRING
  (CASEQ (STATUS OPSYS)
    ((TOPS-20) "EXPUNGE")))

(DEFVAR DELIMITER-STRING
  (IMPLODE (CASEQ (STATUS OPSYS)
	     ((TOPS-20) '(#↑M #↑J))
	     ((ITS) '(#↑H)))))

(DEFUN VALRET-TO-EDITOR ()
       (COND ((STATUS FEATURE ITS)
	      (VALRET (MAKNAM (NCONC (EXPLODEN *EDITOR-JOB-NAME*)
				     (EXPLODEN DELIMITER-STRING)
				     (EXPLODEN MONITOR-EXPUNGE-STRING)
				     (EXPLODEN DELIMITER-STRING)))))
	     ((STATUS FEATURE TOPS-20)
	      (VALRET (MAKNAM (NCONC (EXPLODEN MONITOR-CONTINUE-STRING)
				     (EXPLODEN MONITOR-EXPUNGE-STRING)
				     (EXPLODEN DELIMITER-STRING)
				     (EXPLODEN *EDITOR-JOB-NAME*)
				     (EXPLODEN DELIMITER-STRING)))))
	     ('ELSE
	      (ERROR "inside unknown operating system"
		     'VALRET-TO-EDITOR
		     'FAIL-ACT))))

(DEFUN PROCESS-COMM-FILES (F)
       (DO ((FILE)(FILEP NIL))
	   ((NULL (SETQ FILE (PROBEF *EDITOR-COMM-FILE*)))
	    FILEP)
	   (SETQ FILEP T)
	   (UNWIND-PROTECT
	    (FUNCALL F FILE)
	    (IF *EDITOR-COMM-FILE-DELETE-AFTER-LOADER?* (DELETEF FILE)))))